package com.jsyl.lwbk.business.service;

import com.jsyl.lwbk.business.domain.Child;
import com.jsyl.lwbk.business.domain.CourseChildProject;
import com.jsyl.lwbk.business.domain.education.ChildCourse;
import com.jsyl.lwbk.business.dto.ChildCourseDTO;
import com.jsyl.lwbk.business.dto.ChildInfoDTO;
import com.jsyl.lwbk.system.domain.SysUser;

import java.util.List;
import java.util.Map;

public interface PrepareClassService {

    List<ChildCourse> list(ChildCourseDTO dto, SysUser sysUser);


    List<ChildCourse> listReadingComprehension(ChildCourseDTO dto, SysUser sysUser);


    List<ChildCourse> listLearning(ChildCourseDTO dto, SysUser sysUser);

    List<ChildCourse> listSensory(ChildCourseDTO dto, SysUser sysUser);


    List<ChildCourse> listThinking(ChildCourseDTO dto, SysUser sysUser);

    List<ChildCourse> listSocialize(ChildCourseDTO dto, SysUser sysUser);


    List<ChildCourse> listEnrol(ChildCourseDTO dto, SysUser sysUser);

    void initProject(Long childCourseId,String loginUserName);

    List<CourseChildProject> childList(Long childCourseId,String loginUserName);

    List<ChildInfoDTO> childInfo(Long childCourseId);

    /**
     * 初始化课程项目
     * @param childCourseId
     */
    void initClassProjectOld(Long childCourseId,String loginUserName);

    /**
     * 初始化课程项目（常规班）
     * @param childCourseId
     */
    void initClassProject(Long childCourseId,String loginUserName);
    /**
     * 初始化课程项目（集训班）
     * @param childCourse
     */
    void initThemeProject(ChildCourse childCourse,String loginUserName);


     Map checkTrainPackage(Long childCourseId, String loginUserName);

    /**
     * 训练主题下拉框数据
     * @param childCourseId
     * @param loginUserName
     * @return
     */
     Map getCheckTrainTheme(Long childCourseId, String loginUserName);

     boolean hasCheckTrainPackage(Long childCourseId);

    boolean hasCheckTrainTheme(Long childCourseId);

    /**
     * 是否可以备课
     * @param childCourseId
     * @return
     */
     Map checkPrepare(Long childCourseId);

    /**
     * 判断课程能否备课状态
     * @param local
     * @return
     */
     String checkCourse(ChildCourse local);

    /**
     * 打印题目纸
     * @param childCourseId
     * @return
     */
     String printScoreRecord(Long childCourseId);
    /**
     * 是否可以取消备课
     * @param childCourseId
     * @return
     */
     Map checkCancelPrepare(Long childCourseId);

    /**
     * 是否可以填写成绩
     * @param childCourseId
     * @return
     */
     Map checkEnterScore(Long childCourseId);

    /**
     * 保存选择训练包的题库
     * @param dto
     */
    void saveTrainPackage(ChildCourseDTO dto,String loginName);

    /**
     * 保存集训班选择训练主题
     * @param dto
     */
    void saveTrainTheme(ChildCourseDTO dto,String loginName);

    /**
     * 完成备课
     * @param childCourseId
     */
    void completePrepare(Long childCourseId);

    /**
     * 阅读理解：完成备课
     * @param id
     * @param classPlanId
     */
    void savePlan(Long id,Long classPlanId,Integer classTimes);

    /**
     * 融合课：确认计划
     * @param classId
     * @param classTimes
     * @param classPlanId
     */
    void saveFusionPlan(Long classId,Integer classTimes,Long classPlanId);
    /**
     * 阅读理解：取消备课
     * @param id
     */
    void cancelPlan(Long id);
    /**
     * 是否可以填写成绩
     * @param childCourseId
     * @return
     */
    Map checkNotClass(Long childCourseId);
    /**
     * 未上课
     * @param childCourseId
     */
    void notClass(Long childCourseId);
    /**
     * 取消备课
     * @param childCourseId
     */
    void cancelPrepare(Long childCourseId);

    List<Child> listCourseChild(Long childCourseId);

    void replaceInitLink(CourseChildProject project);

    void replaceDifficulty(CourseChildProject project);

    Map getProjectCompleteTimes(Long child, List<String> projectCodes);
}

